import axios from 'axios'
import qs from 'qs'
// import store from '@/store/index'

// const baseURL = store.state.baseURL
// let loadingInstance = null // 加载全局的loading

const instance = axios.create({ // 创建axios实例，在这里可以设置请求的默认配置
  timeout: 60000 // 设置超时时间60s
// baseURL
})

// 文档中的统一设置post请求头。
// instance.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'

const httpCode = {
  601: '(601)请求参数错误',
  704: '(704)权限不足, 请重新登录',
  703: '(703)服务器拒绝本次访问',
  // 404: '(404)请求资源未找到',
  // 500: '(500)内部服务器错误',
  707: '(707)服务器不支持该请求中使用的方法'
// 502: '(502)网关错误',
// 504: '(504)网关超时'
}

/** 添加请求拦截器 **/
instance.interceptors.request.use(config => {
  /**
   * 在这里：可以根据业务需求可以在发送请求之前做些什么。
   * config.headers['token'] = sessionStorage.getItem('token') || ''
   */
  // loadingInstance = Loading.service({ // 发起请求时加载全局loading，请求失败或有响应时会关闭
  //     spinner: 'fa fa-spinner fa-spin fa-3x fa-fw',
  //     text: '拼命加载中...'
  // })
  return config
}, error => {
  // 对请求错误做些什么
  console.log('请求错误，原因：', error)
  return Promise.reject(error)
})

/** 添加响应拦截器  **/
instance.interceptors.response.use(response => {
  // loadingInstance.close()
  if (response.data.code === 200 || response.status === 200) { // 响应结果里的status: 200是我与后台的约定，大家可以根据实际情况去做对应的判断
    if (response.status) {
      return Promise.resolve(response)
    }
    return Promise.resolve(response.data)
  } else {
    // Message({
    //     message: response.data.message,
    //     type: 'error'
    // })
    console.log(response.data.message)
    return Promise.reject(response.data.message)
  }
}, error => {
  // loadingInstance.close()
  if (error.response) {
    /**
     * 在这里：可以根据业务需求可以在请求失败后做什么。
     * 根据请求失败的http状态码去给用户相应的提示
     */
    const tips = error.response.status in httpCode ? httpCode[error.response.status] : error.response.data.message
    // Message({
    //     message: tips,
    //     type: 'error'
    // })
    console.log(tips)
    return Promise.reject(error)
  } else {
    // Message({
    //     message: '请求失败',
    //     type: 'error'
    // })
    return Promise.reject(new Error('请求失败'))
  }
})

export default class HTTP {
  axiosPost(options) {
    instance({
      url: options.url,
      method: 'post',
      header: {
        'Content-Type': 'application/x-www-form-urlencoded'
      },
      data: qs.stringify(options.data)
    }).then((res) => {
      options.success(res.data)
    }).catch((err) => {
      options.error(err)
    })
  }

  axiosGet(options) {
    instance({
      url: options.url,
      method: 'get'
    }).then((res) => {
      options.success(res.data)
    }).catch((err) => {
      options.error(err)
    })
  }
}
